package fr.ajicommerce.core.dao.implementation;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.NoResultException;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import fr.ajicommerce.core.dao.generics.GenericDAO;
import fr.ajicommerce.core.dao.interfaces.ICompteClientDAO;
import fr.ajicommerce.core.entities.CompteClient;

@Component("compteClientDAO")
@Transactional
public class CompteClientDAO extends GenericDAO<CompteClient, Long> implements
		ICompteClientDAO {

	private Logger log = Logger.getLogger(getClass());
	
	public CompteClientDAO(Class<CompteClient> entityClass) {
		super(entityClass);
	}

	public CompteClientDAO() {
		super(CompteClient.class);
	}

	@Override
	public CompteClient getById(Long idCompteClient) {
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("idCompteClient", idCompteClient);
		
		// l'ID est unique
		CompteClient compteClient = super.findOneResult(CompteClient.FIND_BY_ID, parameters);
		
		log.info("CompteClientDAO --> getById --> CompteClient en sortie de la bdd : " + compteClient);
		return compteClient;
	}
	
	@Override
	public CompteClient findByLogin(String login) {
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("login", login);

		// le login est unique
		CompteClient compteClient = super.findOneResult(CompteClient.FIND_BY_LOGIN, parameters);
		
		log.info("CompteClientDAO --> findByLogin --> CompteClient en sortie de la bdd : " + compteClient);
		return compteClient;
	}
	
	@Override
	public CompteClient findByLoginAndPassword(String login, String password) {
		CompteClient compteClient = null;
		
		try {
			Map<String, Object> parameters = new HashMap<>();
			parameters.put("login", login);
			parameters.put("password", password);

			compteClient = super.findOneResult(CompteClient.FIND_BY_LOGIN_AND_PASSWORD, parameters);
		} catch (NoResultException e) {
			log.info("CompteClientDAO --> findByLoginAndPassword --> CompteClient en sortie de la bdd : " + compteClient);
		}
		
		return compteClient;
	}
	
}
